package com.llf.Controller;

import com.alibaba.fastjson.JSONArray;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.llf.Pojo.Role;
import com.llf.Pojo.User;
import com.llf.Service.RoleServiceImpl;
import com.llf.Service.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Controller
public class UserController {

    @Autowired
    private UserServiceImpl userService;
    @Autowired
    private RoleServiceImpl roleService;

    /**
     *
     * @param userCode 账号
     * @param userPassword 密码
     * @param model 携带信息
     * @return 返回主页
     */
    @PostMapping("/login")
    public String login(String userCode, String userPassword, Model model, HttpServletRequest request){
            User user = userService.getLoginUser(userCode);

        if (user!=null&&userCode.equals(user.getUserCode())&&userPassword.equals(user.getUserPassword())){
            model.addAttribute("mag",user.getUserName());
            request.getSession().setAttribute("hellouser", user.getUserName());
            request.getSession().setAttribute("CMby", user.getId());
            return "frame";
        }else{
            request.getSession().setAttribute("Error", "账号或密码错误");
            return "redirect:/index.jsp";
        }

    }
    @GetMapping("/logout")
    public String logout(HttpSession session){
        session.removeAttribute("hellouser");
        return "redirect:/index.jsp";

    }

    /**
     *
     * @param model
     * @param currentPageNo 当前页
     * @param pageSize 页面大小
     * @return  返回用户列表页
     */

    /**
     *
     * @param model 携带的参数
     * @param userName 用户名
     * @param userRole 用户角色编号
     * @param pageIndex 当前页
     * @param pageSize 页面大小
     * @return  用户列表页
     */
    @RequestMapping("/touserlist")
    public  String getALLUser(Model model,String userName,Integer userRole,
                               Integer pageIndex,Integer pageSize)
    {
        if (userName==null){
            userName="";
        }
        if (userRole==null){
            userRole=0;
        }


        // 为了程序的严谨性，判断非空：
        if (pageIndex == null) {
            pageIndex = 1; // 设置默认当前页
        }
        if (pageIndex <= 0) {
            pageIndex = 1;
        }
        if (pageSize == null) {
            pageSize = 8; // 设置默认每页显示的数据数
        }
        PageHelper.startPage(pageIndex, pageSize);
        ArrayList<User> page = userService.getUser(userName,userRole);
        // 使用PageInfo包装查询后的结果,5是连续显示的条数,结果list类型是Page<E>
        PageInfo<User> pageInfo = new PageInfo<User>(page);
        // 清理 ThreadLocal 存储的分页参数,保证线程安全
        PageHelper.clearPage();
        model.addAttribute("users",page);
        System.err.println("这是。。。"+page);
        model.addAttribute("pageInfo", pageInfo);
        List<Role> roleList = roleService.getRoleList();
        model.addAttribute("roleList",roleList);
        return "userlist";

    }

    /**
     *
     * @param model 用户角色列表
     * @return 添加用户页
     */
    @GetMapping("/touseradd")
    public String toUserAdd(Model model){
        List<Role> roleList = roleService.getRoleList();
        model.addAttribute("roleList",roleList);
        return "useradd";
    }

    /**
     *
     * @param user 添加好的用户对象
     * @return  重定向到用户列表
     */
    @PostMapping("/useradd")
    public String useradd(User user){
        userService.addUser(user);
        return "redirect:/touserlist";
    }

    /**
     *
     * @param id  用户id
     * @return 通过id删除用户 并返回用户列表
     */
    @GetMapping("/delete/{id}")
    public String delete( @PathVariable ("id") Integer id){
        userService.deleteUserById(id);
        return "redirect:/touserlist";

    }

    /**
     *
     * @param model 携带的参数
     * @param id 用户id
     * @return 携带当前用户信息 和用户角色列表 前往修改页
     */
    @GetMapping("/toupdate")
    public String toupdate( Model model, Integer id){
        User user = userService.getUserById(id);
        List<Role> roleList = roleService.getRoleList();
        model.addAttribute("roleList",roleList);
        model.addAttribute("user",user);
        return "usermodify";
    }

    /**
     *
     * @param id 当前用户id
     * @param model 当前用户信息
     * @return   前往用户详情页
     */
    @GetMapping("/tosee")
    public String tosee(  Integer id,Model model){
        User user = userService.getUserById(id);
        model.addAttribute("user",user);
        return "userview";

 }

    /**
     *
     * @param user 更新好的对象
     * @return 前往用户列表页
     */
    @PostMapping("/update")
    public String update(User user){
        userService.updateUser(user);
     return "redirect:/touserlist";
 }

    /**
     *
     * @return 千万密码修改页
     */
     @GetMapping("/topwdmodify")
     public String topwdmodify(){
        return  "pwdmodify";
 }

    /**
     *  ajax异步请求旧密码验证
     * @param oldpassword 老密码
     * @param session 当前登录的session信息
     * @return 返回json数据给请求
     */
    @GetMapping("/oldpassword")
    @ResponseBody
    public String oldpassword( String oldpassword,HttpSession session){
     String userName= session.getAttribute("hellouser").toString();
     System.out.println("session==="+userName);
     User user = userService.quaryByuserName(userName);
     HashMap<String, String> map = new HashMap<>();
     if (userName==null){
         map.put("result","sessionerror");
     }
      else if (user!=null&&oldpassword.equals(user.getUserPassword())){
         map.put("result","true");
     }else if(user!=null&&!oldpassword.equals(user.getUserPassword())){
         map.put("result","false");
     }else if (oldpassword==null){
          map.put("result","error");
     }
     String string = JSONArray.toJSONString(map);
     return string;

 }

    /**
     *
     * @param newpassword 新密码
     * @param session 当前登录的用户session
     * @return 返回用户列表页
     */
     @PostMapping("/updatepwd")
    public String updatepwd(String newpassword,HttpSession session){
     String userName= session.getAttribute("hellouser").toString();
        User user = userService.quaryByuserName(userName);
        user.setUserPassword(newpassword);
        userService.updatePwd(user);
        return "redirect:/touserlist";
 }
}
